const mysql = require('mysql2/promise');
const fs = require('fs');
const path = require('path');
const yaml = require('js-yaml');

// 从YAML配置文件读取数据库配置
function getDatabaseConfig() {
  try {
    // 读取主配置文件
    const mainConfig = yaml.load(
      fs.readFileSync(path.join(process.cwd(), 'config', 'application.yml'), 'utf8')
    );
    
    // 读取环境特定配置文件
    const env = process.env.NODE_ENV || 'development';
    // 映射环境名称到配置文件名
    const envMap = {
      'development': 'dev',
      'production': 'prod',
      'test': 'test'
    };
    const configFile = envMap[env] || 'dev';
    
    const envConfig = yaml.load(
      fs.readFileSync(path.join(process.cwd(), 'config', `application-${configFile}.yml`), 'utf8')
    );
    
    // 合并配置
    const config = deepMerge(mainConfig, envConfig);
    return config.database || {};
  } catch (error) {
    console.error('读取配置文件失败:', error.message);
    // 返回默认配置
    return {
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'root1234',
      database: 'nest_base'
    };
  }
}

// 深度合并对象
function deepMerge(target, source) {
  const result = { ...target };
  
  for (const key in source) {
    if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
      result[key] = deepMerge(result[key] || {}, source[key]);
    } else {
      result[key] = source[key];
    }
  }
  
  return result;
}

async function checkDatabase() {
  try {
    console.log('正在检查数据库连接...');
    
    const dbConfig = getDatabaseConfig();
    
    const connection = await mysql.createConnection({
      host: dbConfig.host || 'localhost',
      port: dbConfig.port || 3306,
      user: dbConfig.username || 'root',
      password: dbConfig.password || 'root1234',
    });

    console.log('✅ 数据库连接成功');

    // 检查数据库是否存在
    const [rows] = await connection.execute('SHOW DATABASES LIKE "' + (dbConfig.database || 'nest_base') + '"');
    
    if (rows.length === 0) {
      console.log('⚠️  数据库 ' + (dbConfig.database || 'nest_base') + ' 不存在，正在创建...');
      await connection.execute('CREATE DATABASE ' + (dbConfig.database || 'nest_base') + ' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
      console.log('✅ 数据库 ' + (dbConfig.database || 'nest_base') + ' 创建成功');
    } else {
      console.log('✅ 数据库 ' + (dbConfig.database || 'nest_base') + ' 已存在');
    }

    await connection.end();
    console.log('✅ 数据库检查完成，可以运行迁移命令');
    
  } catch (error) {
    console.error('❌ 数据库连接失败:', error.message);
    console.log('\n请检查以下配置：');
    console.log('1. MySQL服务是否正在运行');
    console.log('2. 用户名和密码是否正确');
    console.log('3. 端口是否正确（默认3306）');
    console.log('\n如果需要修改连接信息，请编辑 config/application-dev.yml 文件');
  }
}

checkDatabase(); 